import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;

import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;

public class Client
{
    private static String readFileAsString(String filePath) throws java.io.IOException{
        byte[] buffer = new byte[(int) new File(filePath).length()];
        FileInputStream f = new FileInputStream(filePath);
        f.read(buffer);
        String xmlString = new String(buffer);
        xmlString = xmlString.trim().replaceFirst("^([\\W]+)<","<");
        return xmlString;
    }
   public static void main(String[] args) throws Exception
   {
      log.info("Creating jndi context - alternatively use a jndi.properties");
      Properties properties = new Properties();
      properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
      properties.put(Context.URL_PKG_PREFIXES, "org.jnp.interfaces");
      properties.put(Context.PROVIDER_URL, "localhost");
      InitialContext ctx = new InitialContext(properties);

      log.info("Looking up queue");
      Queue queue = (Queue) ctx.lookup("queue/A");
      Queue queue2 = (Queue) ctx.lookup("queue/B");

      log.info("Looking up connection factory");
      QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("UIL2ConnectionFactory");

      log.info("Creating connection");
      QueueConnection qc = qcf.createQueueConnection();
      try
      {
         log.info("Creating session");
         QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

         log.info("Creating sender");
         QueueSender sender = qs.createSender(queue);

         log.info("Creating message");
         TextMessage message = qs.createTextMessage(readFileAsString("D:/soap.xml"));
         message.setStringProperty("SOAPJMS_contentType", "text/xml; charset=\"UTF-8\"");
         message.setStringProperty("SOAPJMS_requestURI", "jms:jndi:jms/queue/C");


         log.info("Sending message");
         sender.send(message);

         log.info("Creating receiver");
         QueueReceiver receiver = qs.createReceiver(queue2);

         log.info("Try to receive message, it will not work");
         Message received = receiver.receiveNoWait();
         if (received != null)
            throw new RuntimeException("Should not get a message if the connection is not started!");

         log.info("You have to start the connection before receiving messages");
         qc.start();

         log.info("This receive will work");
         received = receiver.receiveNoWait();

         log.info("Got message: " + received);
      }
      finally
      {
         qc.close();
      }
   }

   public static class log
   {
      public static void info(String message)
      {
         System.out.println(message);
      }
      public static void error(String message, Throwable t)
      {
         System.err.println(message);
         t.printStackTrace();
      }
   }
}